package org.dtrd.modules.flup.service.impl;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dtrd.modules.flup.entity.bean.FlupAttentionDetail;
import org.dtrd.modules.flup.entity.po.DtrdEntRdFlupAttention;
import org.dtrd.modules.flup.mapper.DtrdEntRdFlupAttentionMapper;
import org.dtrd.modules.flup.service.IDtrdEntRdFlupAttentionService;
import org.springframework.stereotype.Service;

import java.util.Optional;


/**
 * <p>
 * 复诊注意事项 服务实现类
 * </p>
 *
 * @author QR
 * @since 2021-12-29
 */
@DS("multi-datasource1")
@Service
public class DtrdEntRdFlupAttentionServiceImpl extends ServiceImpl<DtrdEntRdFlupAttentionMapper, DtrdEntRdFlupAttention> implements IDtrdEntRdFlupAttentionService {

    @Override
    public FlupAttentionDetail getFlupAttentionLatest() {
        LambdaQueryWrapper<DtrdEntRdFlupAttention> queryWrapper = Wrappers.lambdaQuery(DtrdEntRdFlupAttention.class)
                .orderByDesc(DtrdEntRdFlupAttention::getCreateTime)
                .last("limit 1");
        DtrdEntRdFlupAttention dtrdEntRdFlupAttention = getOne(queryWrapper);
        return Optional.ofNullable(dtrdEntRdFlupAttention)
                        .map(po -> new FlupAttentionDetail().parseFromPo(po))
                        .orElse(null);
    }

    @Override
    public boolean saveOrUpdateFlupAttention(FlupAttentionDetail dto) {
        DtrdEntRdFlupAttention dtrdEntRdFlupAttention = new DtrdEntRdFlupAttention();
        if(dto.getDataId() == null){
            dtrdEntRdFlupAttention = dtrdEntRdFlupAttention.init();
        }
        dtrdEntRdFlupAttention.parseFromDto(dto);
        return saveOrUpdate(dtrdEntRdFlupAttention);
    }

    @Override
    public boolean removeFlupAttention(Integer dataId) {
        return removeById(dataId);
    }

    private LambdaQueryWrapper<DtrdEntRdFlupAttention> baseQueryWrapper() {
        return Wrappers.lambdaQuery(DtrdEntRdFlupAttention.class)
                        .eq(DtrdEntRdFlupAttention::getIsDel, 0);
    }

    private LambdaUpdateWrapper<DtrdEntRdFlupAttention> baseUpdateWrapper() {
        return Wrappers.lambdaUpdate(DtrdEntRdFlupAttention.class)
                        .eq(DtrdEntRdFlupAttention::getIsDel, 0);
    }
}
